• This version is being released mainly so I can be sure that a lot of recent enhancements of mine actually work, so the first release of 2.1f (coming soon) will be more stable. Please don't hesitate to send me bug reports and enhancement requests!
• Changes from 2.1e2 to 2.1e3: The broken "(random)" function is fixed. Text output is now considerably faster and cleaner, and editing is more consistent. The Home/End/PgUp/PgDn keys now work properly, and the Help key no longer puts an invisible character into the window. Command-Left/Right moves the cursor to the start/end of a line, Command-Up/Down pages up/down, and Option-Left/Right moves the cursor back/forward one word. The variable *features* is now defined, so any of the demo files that looked for it won't complain any more about not finding it. The About box is spiffier.
• Changes from 2.1e to 2.1e2: An infinite loop in the code for "(loop)" was fixed, and the text I/O routines were cleaned up a little bit. Memory handling was also improved. A few of the comments in these release notes were edited.
• Here's a good way to start seeing what xlisp can do: load "hanoi.lsp" and type "(hanoi 3)", then load "turtle.lsp" and type "(graphicsdemo)". Then have fun from there.
• The manual was written for the DOS and Unix versions of xlisp. I haven't updated it to cover the Macintosh version, but I don't think any changes are necessary.
• You can load a file from the xlisp command line by giving its full pathname, as in (load "hard drive:folder:file.lsp"). Partial pathnames rely on the "default directory," which can get changed often, so they might not always work.
• The only change I made to the original xlisp source code was in needsextension() in xlsubr.c to make xlisp no longer try to add extensions to filenames. Before, if the user tried to load "file", xlisp would change this to "file.lsp" then complain that the file couldn't be found. Note that this is the ONLY change I made to the original source code, other than adding a Macintosh section to the OS-specific part of xlisp.h.
• I think I've tweaked the parameters so that you can recurse all you want without danger of the application's stack running through other memory. The code now uses 32-bit far pointers instead of 16-bit segment pointers for its addresses (a nice new feature in THINK C 6.0). If you notice xlisp running out of memory too quickly or doing funny things when you recurse deeply, let me know and I'll fiddle with things some more.
• Parens and double-quotes are matched (flashed) as you type them. You can now edit your commands across several lines; the entire command is only sent to the xlisp engine for parsing when you press Return after closing all sets of parens in your command. If you have a special case where you want xlisp to parse everything you've typed so far even though it doesn't think the command is complete yet, press Enter.
• The paren-matching routine doesn't check for parens within comments because I didn't feel like writing code yet to make it do so. This just means that when you type "( ; )", the close-paren will match the open-paren, even though it probably shouldn't. If however you type "( ; (" then a ")" on the next line, xlisp won't think the expression is complete so it'll just sit there; you'll have to press Enter to get it to evaluate. But how many times do you do something like this in real programming, eh? Also note that comments like #| this |# aren't recognized (and therefore not handled properly) by the interface, although you can use them in your Lisp code without problems.
• Everything works fine on multi-monitor systems except that window zooming and Split Screen use the main monitor, instead of the monitor that the windows are on. If someone cares to give me another monitor, I'll be glad to work on fixing this. :-) Until then, it's not that important to fix.
• The graphics window isn't really handled properly (it doesn't get refreshed). I'll work on fully implementing it later.
• I don't plan to add a built-in text editor to xlisp, because I recommend that other people use a program like Alpha or BBEdit for editing. (That's what modular programming is all about, anyway.) Maybe if there's demand in the future (and if I can afford the new Inside Mac), I'll see about adding AppleEvent communications between xlisp and and an editor to allow lisp command evaluation from the editor's windows, but that's not currently a priority.
• The speed (or lack thereof) of xlisp is due to the fact that it's interpreted, not compiled. Compiled Lisps (such as MCL) will run circles around xlisp, but then again MCL costs several hundred dollars and uses ten megs of disk space.
• xlisp will process in the background, while you work in other applications.
• The function read-char does not work correctly, so step.lsp and stepper.lsp won't work. I may have to hack Tom Almy's xlisp base code to get that to function properly.
• If you enter several commands on one line, a prompt will be printed before the results of all commands after the first one. To fix this, I'll have to change the base code.
• I still haven't thought of a clean way to handle making toolbox calls from xlisp, so I haven't implemented it yet. There will probably need to be some way of having the interpreter know about every single toolbox routine, where it is in ROM, and how many arguments it takes and what kinds of arguments they are.
• The sample files "turtle.lsp" and "dragon.lsp" have been rewritten to run properly on the Mac. However, "turtles.lsp" has not been rewritten, and will not work properly on the Mac. I've left it here because it demonstrates how to use classes, and because I might rewrite it at some point. Some of the other sample files also may not work.
• Note that you can type "(exit)" to quit xlisp. Neat, huh?
This code is subject to any restrictions that have been placed on the original xlisp distribution, and may be freely distributed. However, I am NOT responsible for any damages that may result from the use of this program, and I am NOT obligated to fix any bugs or add any features to it. You get what you pay for.
If you have any comments or suggestions about this Macintosh port of xlisp, feel free to email me at bskendig@netcom.com.